# code_examples_on_C

/*Создать структуру для электронного каталога книг (Автор, название, издательство, тираж).
Ввести с клавиатуры данные о нескольких книгах.
Найти все книги заданного автора(создать дин.массив результата).
Найти все книги с тиражом больше заданного значения (значение ввести с клавиатуры).
Все результаты выводить на экран.
*/
#include <locale.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 3

void entering_information();
void search_for_books_by_author();
void search_for_circulations();

struct ElectronicCatalogBooks {
    char author[20];
    char title[20];
    char publishingHouse[30];
    int circulation;
};
struct ElectronicCatalogBooks library[n];


int main(void) {
    setlocale(LC_ALL, "Rus");
    entering_information();
    search_for_books_by_author();
    search_for_circulations();
    return 0;
}



void entering_information() {
    char str[20], arr[] = "0123456789", * p = NULL;
    for (int i = 0; i < n; i++) {
        printf("Данные о авторе, название, издательстве, тираже № %d\n", ++i);
        i--;

        while (1){
            printf("Введите автора: ");
            gets(str);
            p = strpbrk(str, arr);
            if (p != NULL)      printf("\nНекорректный ввод\n");
            else      break;
        }
        p = NULL;
        strcpy(library[i].author, str);


        while (1) {
            printf("Введите название: ");
            gets(str);
            p = strpbrk(str, arr);
            if (p != NULL)      printf("\nНекорректный ввод\n");
            else      break;
        }
        p = NULL;
        strcpy(library[i].title, str);


        while (1) {
            printf("Введите издательство: ");
            gets(str);
            p = strpbrk(str, arr);
            if (p != NULL)      printf("\nНекорректный ввод\n");
            else      break;
        }
        p = NULL;
        strcpy(library[i].publishingHouse, str);


        while (1) {
            printf("Введите тираж: ");
            if (scanf("%d", &library[i].circulation) != 1) {
                printf("\nНекорректный ввод\n");
                while (getchar() != '\n');
            } else      break;
        }
        printf("\n");
        while (getchar() != '\n');
    }
    printf("Вы создали свою библиотеку книг!\n");
}



void search_for_books_by_author() {
    char searchBooksByAuthor[20];
    int number = 0;
    char* arr = (char*)malloc(n * 20 * sizeof(char));
    printf("Ведите автора, книги которого хотите найти: ");
    gets(searchBooksByAuthor);

    printf("Книги автора %s: ", searchBooksByAuthor);
    for (int i = 0; i < n; i++) {
        if ((strcmp(library[i].author, searchBooksByAuthor) == 0)) {
            strcpy(&arr[number * 20], library[i].title);
            number++;
        }
    }
    for (int i = 0; i < number; i++) {
        printf("\n%s", &arr[i * 20]);
    }
    free(arr);      arr = NULL;
}



void search_for_circulations() {
    int number = 0, circulationBook;
    char* arra = (char*)malloc(n * 20 * sizeof(char));
    printf("\nВведите тираж, книги которых хотите найти: ");
    scanf("%d", &circulationBook);
    printf("Книги с тиражом больше %d: ", circulationBook);

    for (int i = 0; i < n; i++) {
        if (circulationBook < library[i].circulation) {
            strcpy(&arra[number * 20], library[i].title);
            number++;
        }
    }

    for (int i = 0; i < number; i++) {
        printf("\n%s", &arra[i * 20]);
    }
    free(arra);      arra = NULL;
}
